/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:张熳
 * Date:2025-09-05
 * Time:15:23
 */

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

/**
 * Main类表示实现图书管理的一系列操作
 * 首先写一个登录 login方法：选择你的身份，并通过这个身份使用对图书的权限,注意返回值类型是User-将这个身份进行向上转型，使用父类中的方法
 */

public class Main {
    public static User login() {
        System.out.print("请输入你的姓名：");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        System.out.print("请输入你的身份-1.管理员 2.普通用户：");
        int choice = scanner.nextInt();
        if (choice == 1) {
            return new AdminUser(name);
        }else {
            return new NormalUser(name);
        }
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();

        while (true) {
            int choice = user.menu();
            //我们将操作类和接口全部写完，通过User user = login();我们也已经知道当前的对象是什么（AdminUser/NormalUser）
            //那么接下来如何访问当前的对象进行操作呢？-- 通过login方法返回的子类对象实例化向上转型为父类User类，那么我们就只能调用父类中的方法了
            //也就是说这些方法（ioperation包中类中的方法）必须在类中才能进行调用访问，那么我们可以将这些操作类在User类中写成一个对象数组
            //需要进行哪个操作就调用数组中的哪个元素，而这个数组通过子类进行初始化，在调用子类对象时，构造方法会初始化好对应的操作对象的work方法
            //在写这个数组时，依然要用到封装思想，使用protected修饰
            user.doIoperation(choice,bookList);
        }
    }
}
